/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package packageBusinessLogic;

import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import packageDBAccess.*;
import packageException.*;
import packageModel.*;

/**
 *
 * @author Vince
 */
public class LibrairieManager
{
    private DBAccess dba;
    
    public LibrairieManager()
    {
        dba = new DBAccess();
        
    }
    
    
    public void addUser(Utilisateur u) throws UserException,ClassNotFoundException,RequetteException, ConnectionDBException
    {
        if(u.getNom().isEmpty()){
            throw new UserException("La valeur entrée pour \"Nom\" est incorrecte");
        }
        else
        {
            if(u.getPrenom().isEmpty()){
                throw new UserException("La valeur entrée pour \"Prénom\" est incorrecte");
            }
            else
            {
              if(u.getAdresse().isEmpty()){
                  throw new UserException("La valeur entrée pour \"Adresse\" est incorrecte");
              }
              else
              {
                  if(u.getCodePostal() <= 0 || u.getCodePostal() >= 99999){
                      throw new UserException("La valeur entrée pour \"Code Postal\" est incorrecte");
                  }
                  else
                  {
                     if(u.getVille().isEmpty()){ 
                         throw new UserException("La valeur entrée pour \"Ville\" est incorrecte");
                     }
                     else
                     {
                         if(u.getEmail().isEmpty()){
                             throw new UserException("La valeur entrée pour \"Email\" est incorrecte");
                         }
                         else
                         {
                             if(!Pattern.matches("^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)+$",u.getEmail())){
                                 throw new UserException("La valeur entrée pour \"Mot de passe\" est incorrecte");
                             }
                             else{
                                 try
                                 {
                                    if(!u.getTel().isEmpty() && (Integer.parseInt(u.getTel()) < 1 || Integer.parseInt(u.getTel()) > 999999999)){
                                       throw new UserException("La valeur entrée pour le \"Téléphone\" est incorrecte");
                                    }
                                    else{
                                        dba.addUser(u);
                                    }
                                 }
                                 catch(NumberFormatException ex)
                                 {throw new UserException("La valeur entrée pour \"Téléphone\" doit être un nombre");}
                             }                                 
                         }
                     }
                  }
              }
            }
        }
    }
    
    public ArrayList<Categorie> getCatList()throws ResultSetException, ConnectionDBException, ClassNotFoundException
    {
        return dba.getCatList();
    }
    
    public ArrayList<Livre> getBookListCat(int cat) throws ResultSetException, ClassNotFoundException, ConnectionDBException
    {
        ArrayList<Livre> list = dba.getBookListCat(cat);
        
        for (Livre l : list){
            
            if (l.getPromotion() != 0){
                if(dba.checkPromo(l.getIsbn()) == false){
                    l.setPromotion(0);
                }
            }
            
        }
        
        return list;
    }
    
    public Livre getBook(long isbn) throws ResultSetException, ClassNotFoundException, ConnectionDBException
    {
        
        Livre b = dba.getBook(isbn);
        
        if (b.getPromotion() != 0){
                if(dba.checkPromo(b.getIsbn()) == false){
                    b.setPromotion(0);
                }
            }
        
        
        return b;
    }
    
    public ArrayList<Livre>getLivreRecherche(String rech)throws ConnectionDBException, ClassNotFoundException
    {
        return dba.getLivreRecherche(rech);
    }
    
    public Utilisateur getUserByMail(String mail,String mdp) throws ClassNotFoundException, ConnectionDBException, UserException
    {
        Utilisateur u = dba.getUserByMail(mail);
        u.setMdp(u.getMdp().trim());
        
        if(u.getMdp().equals(mdp))
        {
            return u;
        }
        else
        {
            throw new UserException("Le mot de passe entré est incorrect");
        }
    }
    public void addCommande(Utilisateur u, Panier p) throws ConnectionDBException, ResultSetException, ClassNotFoundException
    {

        ItemPanier temp;

        Integer derniereCom = dba.getLastCom(u.getId());
        Integer nouvelleCom =derniereCom+1;
        Calendar date = Calendar.getInstance();
        dba.addCommande(u.getId(),date,nouvelleCom);

        for (Object key : p.getPanier().keySet())
        {
            temp = (ItemPanier)p.getPanier().get((Long)key);
            dba.addLigne(nouvelleCom, u.getId(), temp.getIsbn(), temp.getQte(), temp.getUnitPrice());   
        }
        
    }
    
    public ArrayList<Livre> getPromoLivre() throws ConnectionDBException, ClassNotFoundException, ResultSetException
    {
        return dba.getPromoLivre();
    }
    
    public Commande getCommande(Integer numClient) throws ConnectionDBException, ResultSetException, ClassNotFoundException{
        
            Integer lastCom = dba.getLastCom(numClient);
            Commande c = dba.getCom(numClient, lastCom);
            c = dba.getLignesCom(c);
            
            return c;
            

    }
    
    
}
    
    

